/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fr.sorbonne.inf1.tp3.controleur;

import fr.sorbonne.inf1.tp3.model.InterfaceApplication;
import fr.sorbonne.inf1.tp3.model.exception.*;
import fr.sorbonne.inf1.tp3.vue.Vue;
import fr.sorbonne.inf1.tp3.properties.BundleTool;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Locale;

/**
 * 
 * @author Dubos Romain
 * @author Oukherfellah Riad
 */
public class Controleur implements ActionListener, WindowListener {

    private Vue vue;
    private InterfaceApplication model;

    /**
     * Constructeur
     * @param pVue vue de l'application
     * @param pModel modèle de l'application
     */
    public Controleur(Vue pVue, InterfaceApplication pModel) {
        this.vue = pVue;
        this.model = pModel;
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        String event = ae.getActionCommand();

        //GESTION DE LA LANGUE
        if (event.equals(Vue.FRANCAIS)) {
            BundleTool.setBundle(Locale.FRANCE);
            vue.nommerComposants();
            vue.bloqueItemLangueCourante();
        }
        if (event.equals(Vue.ANGLAIS)) {
            BundleTool.setBundle(Locale.UK);
            vue.nommerComposants();
            vue.bloqueItemLangueCourante();
        }


        //EFFACER
        if (event.equals(Vue.EFFACER)) {
            vue.effacerChamps();
        }

        //CALCULER
        if (event.equals(Vue.CALCULER)) {
            Double result = 0.0;
            if (vue.annuiteIsChecked()) {
                try {
                    result = model.calculerAnnuite(Double.valueOf(vue.montant()), Integer.valueOf(vue.autre()), Double.valueOf(vue.taux()));
                } catch (InternalErrorException ex) {
                    vue.afficherMessageErreur("Erreur", "Erreur Interne");
                    return;
                } catch (AnnuiteApplicationException ex) {
                    vue.afficherMessageErreur("Erreur", "Erreur Annuité");
                    return;
                } catch (MontantApplicationException ex) {
                    vue.afficherMessageErreur("Erreur", "Erreur Montant");
                    return;
                } catch (TauxApplicationException ex) {
                    vue.afficherMessageErreur("Erreur", "erreur Taux");
                    return;
                } catch (NbAnneesApplicationException ex) {
                    vue.afficherMessageErreur("Erreur", "Erreur Nombre Années");
                    return;
                } catch (CalculAnnuiteApplicationException ex) {
                    vue.afficherMessageErreur("Erreur", "Erreur Calcul Anuité");
                    return;
                } catch (NumberFormatException e) {
                    vue.afficherMessageErreur("Erreur", "Ne renseigner que des chiffres");
                    return;
                }
                vue.afficherMessageInfo("Résultat Annuités", String.valueOf(result));

            } else if (vue.nbAnneesIsChecked()) {
                try {
                    result = model.calculerNbAnnees(Double.valueOf(vue.montant()), Double.valueOf(vue.taux()), Integer.valueOf(vue.autre()));
                } catch (InternalErrorException ex) {
                    vue.afficherMessageErreur("Erreur", "Erreur Interne");
                    return;
                } catch (AnnuiteApplicationException ex) {
                    vue.afficherMessageErreur("Erreur", "Erreur Annuité");
                    return;
                } catch (MontantApplicationException ex) {
                    vue.afficherMessageErreur("Erreur", "Erreur Montant");
                    return;
                } catch (TauxApplicationException ex) {
                    vue.afficherMessageErreur("Erreur", "Erreur Taux");
                    return;
                } catch (NbAnneesApplicationException ex) {
                    vue.afficherMessageErreur("Erreur", "Erreur Nombre Années");
                    return;
                } catch (CalculAnnuiteApplicationException ex) {
                    vue.afficherMessageErreur("Erreur", "Erreur Calcul Anuité");
                    return;
                } catch (NumberFormatException e) {
                    vue.afficherMessageErreur("Erreur", "Ne renseigner que des chiffres");
                    return;
                }
                vue.afficherMessageInfo("Résultat NB Années", String.valueOf(result));
            }
        }


        /**BOUTONS RADIOS**/
        //Calcul annuite
        if (event.equals(Vue.ANNUITE)) {
            vue.changeTextToNbAnnees();
        }

        if (event.equals(Vue.QUITTER)) {
            System.exit(0);
        }

        //Calcul nbAnnees
        if (event.equals(Vue.NBANNEES)) {
            vue.changeTextToAnnuite();
        }
        /** FIN BOUTONS RADIO **/
    }

    @Override
    public void windowOpened(WindowEvent e) {
    }

    @Override
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }

    @Override
    public void windowClosed(WindowEvent e) {
    }

    @Override
    public void windowIconified(WindowEvent e) {
    }

    @Override
    public void windowDeiconified(WindowEvent e) {
    }

    @Override
    public void windowActivated(WindowEvent e) {
    }

    @Override
    public void windowDeactivated(WindowEvent e) {
    }
}
